package main

import "fmt"

func main() {
	var a int
	// 每个变量有2层含义： 变量的内存，变量的地址

	a = 10
	fmt.Printf("a = %d \n", a)   //变量的内存
	fmt.Printf("&a = %p \n", &a) //变量的地址

	// 保存某个变量的地址，需要指针类型， *int 保存int的地址， **int保存 *int地址
	var p *int
	p = &a
	fmt.Println("p = ", p)

	// *p操作的不是p的内存， 是p所指向的内存（就是a）
	*p = 666
	fmt.Printf("*p = %v, a = %d\n", *p, a)

	p1 := &p
	fmt.Println(p1)
}
